extends Node


const DEFAULT_MASS:= 2.0 # 默认混乱值？
const DEFAULT_MAX_SPEED:= 400.0 # 默认最大速度
const DEFAULT_SLOW_RADIUS:= 200.0 # 默认减速半径


static func fllow(
	velocity:Vector2,# 输入的速度
	global_position:Vector2,# 角色当前的全局位置
	target_position:Vector2,# 角色当前的全局位置
	max_speed:= DEFAULT_MAX_SPEED,
	mass:= DEFAULT_MASS
) -> Vector2:
	# 期望的速度
	var desired_velocity = (target_position-global_position).normalized() * max_speed
	# 计算转向
	var steering = (desired_velocity - velocity) / mass
	var new_velocity = velocity + steering
	return new_velocity

static func arrive_to(
	velocity:Vector2,# 输入的速度
	global_position:Vector2,# 角色当前的全局位置
	target_position:Vector2,# 角色当前的全局位置
	max_speed:= DEFAULT_MAX_SPEED,
	slow_radius:= DEFAULT_SLOW_RADIUS,
	mass:= DEFAULT_MASS
) -> Vector2:
	# 角色到目标位置的距离
	var to_target = global_position.distance_to(target_position)
	# 期望的速度
	var desired_velocity = (target_position-global_position).normalized() * max_speed
	# 角色进入减速范围内
	if to_target < slow_radius:
		# 通过设计一个小于1的因子来减速 - 这个减速计算有点随意
		desired_velocity *= (to_target / slow_radius) * 0.8 + 0.2
	# 计算转向
	var steering = (desired_velocity - velocity) / mass
	var new_velocity = velocity + steering
	return new_velocity
